package ltd.newbee.cloud.config;

import com.sun.org.apache.bcel.internal.generic.NEW;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.Charset;

/**
 * @Auther: tangyushan
 * @Date: 2024/5/17 - 05 - 17 - 18:32
 * @Description: ltd.newbee.cloud.config
 * @version: 1.0
 */
@Configuration
public class RestTemplateConfig {
    /**
     * 创建并配置一个 RestTemplate 实例。
     *
     * @param factory 客户端请求工厂，用于创建 HTTP 请求。
     * @return 配置好的 RestTemplate 实例，可用于执行 RESTful 请求。
     */
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate = new RestTemplate(factory);
        // 配置消息转换器，确保字符串的编码为 UTF-8
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate;
    }

    /**
     * 创建并配置一个SimpleClientHttpRequestFactory实例。
     * 这个函数没有参数。
     *
     * @return ClientHttpRequestFactory - 返回配置好的SimpleClientHttpRequestFactory实例。
     */
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        // 创建SimpleClientHttpRequestFactory实例
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

        // 设置读取超时时间为10秒
        factory.setReadTimeout(10 * 1000);
        // 设置连接超时时间为5秒
        factory.setConnectTimeout(5 * 1000);

        return factory;
    }
}
